<?php
namespace app\common\library;

use think\queue\Job;
use think\facade\Log;

class QueueEmail
{
    /**
     * 邮件提醒
     * @param Job $job
     * @param $data
     */
    public function sendMAIL(Job $job, $data)
    {
        $isJobDone = $this->send($data);
        if ($isJobDone) {
            //成功删除任务
            $job->delete();
        } else {
            //任务轮询4次后删除
            if ($job->attempts() > 3) {
                // 第1种处理方式：重新发布任务,该任务延迟10秒后再执行
                //$job->release(10);
                // 第2种处理方式：原任务的基础上1分钟执行一次并增加尝试次数
                //$job->failed();
                // 第3种处理方式：删除任务
                $job->delete();
            }
        }
    }

    /**
     * 失败
     * @param $data
     */
    public function failed($data){
        Log::error("在".date('Y-m-d H:i:s',time())."执行发送邮件失败:" . json_encode($data));
    }

    /**
     * 根据消息中的数据进行实际的业务处理
     * @param $data
     * @return bool
     */
    private function send($data)
    {
        $email = new Email();
        $email->subject('测试邮件');
        $email->to($data['to']);
        $email->message($data['text']);
        if ($email->send()) {
            return true;
        } else {
            return false;
        }
    }
}